package Interfaz;

import java.awt.Graphics2D;
import java.awt.Image;
import java.util.Queue;

import javax.swing.ImageIcon;

import Juego.Juego;
/**
 *Clase Disparo extiende de Thread y es utilizada por la clase Metodos 
 *@author Laurent Lisandro, Larzabal Cristian 
 */
public class Disparo extends Thread{
	/**
	 * Crea un hilo que dibuja en panelJuegos el disparo del Robot
	 * y busca si hay un objeto 5 casillas adelante, si hay le disminuye
	 * la vida y verifica si lo destruyo en caso de ser cierto, 
	 * lo quita del mapa    
	 */
	public void run(){
		Juego juego=Metodos.get().juego();
		int height=Metodos.get().height();
		int weight=Metodos.get().weight();
		Graphics2D grafico=Metodos.get().grafico();
		
		int dist=juego.distanciaDisparo();
		int x=juego.getPosicionRobot().getX();
		int y=juego.getPosicionRobot().getY();
		dist--;
		switch(juego.getPosicionRobot().getMira()){
		
			case 'n' : {
				Image imagen = new ImageIcon(getClass().getClassLoader().getResource("Imagenes/Fire-Up.gif")).getImage();
				for(int i=1;i<height*dist;i++){
						if(i%25==0){
						Queue<Object> elem=juego.elements(x, y-(i/height));
						while(!elem.isEmpty())
							SpriteStore.get().getSprite(elem.poll()).draw(grafico, x*weight, (y-(i/height))*height);
						 							
						grafico.drawImage(imagen,x*weight,(y*height)-i,weight/2,height/2,null);	
						SpriteStore.get().getSprite(juego.getRobot()).draw(grafico, juego.getPosicionRobot().getX()*weight, juego.getPosicionRobot().getY()*height);
						try {
							Thread.sleep(100);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
				}
				Metodos.get().paint();
			};
				break;
		
			case 'o' : {
				Image imagen = new ImageIcon(getClass().getClassLoader().getResource("Imagenes/Fire-Left.gif")).getImage();
				for(int i=1;i<weight*dist;i++){
						if(i%25==0){
						Queue<Object> elem=juego.elements(x-(i/weight), y);
						while(!elem.isEmpty())
							SpriteStore.get().getSprite(elem.poll()).draw(grafico, (x-(i/weight))*weight, y*height);
						 							
						grafico.drawImage(imagen,(x*weight)-i,(y*height),weight/2,height/2,null);	
						SpriteStore.get().getSprite(juego.getRobot()).draw(grafico, juego.getPosicionRobot().getX()*weight, juego.getPosicionRobot().getY()*height);
						try {
							Thread.sleep(100);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
				}
				Metodos.get().paint();
			};
			break;
		
			case 's' : {
				Image imagen = new ImageIcon(getClass().getClassLoader().getResource("Imagenes/Fire-Down.gif")).getImage();
				for(int i=1;i<height*dist;i++){
						if(i%25==0){
						Queue<Object> elem=juego.elements(x, y+(i/height));
						while(!elem.isEmpty())
							SpriteStore.get().getSprite(elem.poll()).draw(grafico, x*weight, (y+(i/height))*height);
						 							
						grafico.drawImage(imagen,x*weight,(y*height)+i,weight/2,height/2,null);	
						SpriteStore.get().getSprite(juego.getRobot()).draw(grafico, juego.getPosicionRobot().getX()*weight, juego.getPosicionRobot().getY()*height);
						try {
							Thread.sleep(100);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
				}
				Metodos.get().paint();
			};
			break;
		
			case 'e' : {
				Image imagen = new ImageIcon(getClass().getClassLoader().getResource("Imagenes/Fire-Right.gif")).getImage();
				for(int i=1;i<weight*dist;i++){
						if(i%25==0){
						Queue<Object> elem=juego.elements(x+(i/weight), y);
						while(!elem.isEmpty())
							SpriteStore.get().getSprite(elem.poll()).draw(grafico, (x+(i/weight))*weight, y*height);
						 							
						grafico.drawImage(imagen,(x*weight)+i,(y*height),weight/2,height/2,null);	
						SpriteStore.get().getSprite(juego.getRobot()).draw(grafico, juego.getPosicionRobot().getX()*weight, juego.getPosicionRobot().getY()*height);
						try {
							Thread.sleep(100);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
				}
				Metodos.get().paint();
			};
			break;	
		}
		juego.disparar();
		Metodos.get().paint();
	}
}
